package com.kexio.user.constants;

import java.util.Set;

/**
 * 角色常量定义
 * 
 * 统一管理角色相关的常量
 * 
 * @author Kexio Team
 * @since 1.0.0
 */
public class RoleConstants {
    
    // ==================== 超级管理员角色 ====================
    
    /**
     * 超级管理员角色编码（标准）
     */
    public static final String SUPER_ADMIN = "SUPER_ADMIN";
    
    /**
     * 超级管理员角色编码集合（包含所有变体，用于兼容性检查）
     * 
     * 注意：数据库中应统一使用 SUPER_ADMIN，此集合仅用于历史数据兼容
     */
    public static final Set<String> SUPER_ADMIN_CODES = Set.of(
        "SUPER_ADMIN",
        "role_super_admin",
        "super_admin",
        "ROLE_SUPER_ADMIN"
    );
    
    // ==================== 其他角色 ====================
    
    /**
     * 管理员角色编码
     */
    public static final String ADMIN = "ADMIN";
    
    /**
     * 普通用户角色编码
     */
    public static final String USER = "USER";
    
    /**
     * 经理角色编码
     */
    public static final String MANAGER = "MANAGER";
    
    /**
     * 访客角色编码
     */
    public static final String GUEST = "GUEST";
    
    // ==================== 角色组 ====================
    
    /**
     * 管理类角色集合（拥有管理权限的角色）
     */
    public static final Set<String> ADMIN_ROLES = Set.of(
        SUPER_ADMIN,
        ADMIN,
        MANAGER
    );
    
    /**
     * 普通类角色集合（基础用户角色）
     */
    public static final Set<String> BASIC_ROLES = Set.of(
        USER,
        GUEST
    );
    
    // ==================== 辅助方法 ====================
    
    /**
     * 检查角色编码是否为超级管理员（支持各种变体）
     * 
     * @param roleCode 角色编码
     * @return 是否为超级管理员
     */
    public static boolean isSuperAdmin(String roleCode) {
        if (roleCode == null || roleCode.trim().isEmpty()) {
            return false;
        }
        return SUPER_ADMIN_CODES.contains(roleCode);
    }
    
    /**
     * 检查角色编码是否为管理类角色
     * 
     * @param roleCode 角色编码
     * @return 是否为管理类角色
     */
    public static boolean isAdminRole(String roleCode) {
        if (roleCode == null || roleCode.trim().isEmpty()) {
            return false;
        }
        return ADMIN_ROLES.contains(roleCode);
    }
    
    /**
     * 检查角色编码是否为基础角色
     * 
     * @param roleCode 角色编码
     * @return 是否为基础角色
     */
    public static boolean isBasicRole(String roleCode) {
        if (roleCode == null || roleCode.trim().isEmpty()) {
            return false;
        }
        return BASIC_ROLES.contains(roleCode);
    }
    
    // ==================== 私有构造函数 ====================
    
    private RoleConstants() {
        throw new IllegalStateException("Utility class - do not instantiate");
    }
}

